<?php

class CommentHandler {
	
	// databas och validering som skapas i konstruktorn
	private $m_db = null;
	private $validate = null;
	
	public function __construct(Database $db) {
		$this -> m_db = $db;
		$this->validate = new Validator();
	}
	// ingen html eller annat
	public function noHTML($var){
		if($this->validate->validateNoHTMLJS($var))
		{
			return true;
		}
		return false;
	}
	// kommentaren får inte vara tom
	public function CommentIsEmpty($text) {
		if (empty($text)) {
			return true;
		}
		return false;
	}
	// kommentaren får inte vara längre än 200 tecken
	public function commentLength($text) {
		if (strlen($text) >= 200) {
			return true;
		}
		return false;
	}
	// skapar en kommentar som läggs in i databasen
	public function DoComment($name, $fileName, $text) {
		$sqlQuery = "INSERT INTO comment(username,filename, text) VALUES(?, ?, ?)";

		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('sss', $name, $fileName, $text);

		if ($this -> m_db -> execute($stmt) === 0) {
			return true;
		}
		return false;
	}
	// räknar antal kommentarer
	public function CountComments($fileName){
		$sqlQuery = "SELECT Count(*) FROM comment WHERE filename = ?";
		
		$count = null;
		
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $fileName);
		
		$this -> m_db -> execute($stmt);
		
		$stmt -> bind_result($count);
		
		while ($stmt -> fetch()) {
			return $count;
			
		}
		
	}
	// hämtar kommentaren via filnamnet
	public function GetComment($fileName) {

		$sqlQuery = "SELECT pk, username, text, date FROM comment WHERE filename = ? order by pk DESC";
		
		$id = null; 
		$username = null;
		$text = null;
		$date = null;
		
		$comments = new CommentArray();
		
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $fileName);

		$this -> m_db -> execute($stmt);

		$stmt -> bind_result($id, $username, $text, $date);
		

		while ($stmt -> fetch()) {
			// för varje rad så lägger vi till en kommentars-objekt i kommentararrayen
			$comments->add(new Comment($id, $username, $text, $date));
			
		}
		// retunerar arrayen
		return $comments->get();
	}
	// hämtar namnet där id är som parametern
	public function GetNameComment($id){
		
		$sqlQuery = "SELECT username FROM comment WHERE pk = ?";
		
		$username = null;
		
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $id);

		$this -> m_db -> execute($stmt);

		$stmt -> bind_result($username);
		

		while ($stmt -> fetch()) {
			
			return $username;
			
		}
	}
	// tar bort kommentar via id
	public function DeleteComment($id){
		$sqlQuery = "DELETE FROM comment WHERE pk = ?";
		
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $id);

		$this -> m_db -> execute($stmt);
		return true;
	}
	// tar bort alla kommentarer där filnamnet är som parametern
	public function DeleteCommentByFileName($fileName){
		$sqlQuery = "DELETE FROM comment WHERE filename = ?";
		
		$stmt = $this -> m_db -> Prepare($sqlQuery);

		$stmt -> bind_param('s', $fileName);

		$this -> m_db -> execute($stmt);
		return true;
	}
	// test för kommentarer
	public function TestComment(){
		
		$fileName = "bäver.jpg";
		$name = "TestBäver";
		$text = "Test123";
		
		$this->DeleteCommentByFileName($fileName);
		
		if($this->CountComments($fileName) !== 0)
		{
			echo "Det borde inte finnas några kommentarer med filnamnet bäver";
			return false;
		}
		
		if($this->DoComment($name, $fileName, $text) === false){
			echo "Det borde vara rätt då vi har skapa en kommentar på rätt sätt";
			return false;
		}
		if($this->CountComments($fileName) !== 1){
			echo "Nu borde de finnas en kommentar på den filen men de gör de inte";
			return false;
		}
		
		$Comments = $this->GetComment($fileName);
		$LastComment = end($Comments);
		
		if($LastComment->getText() !== "Test123"){
			echo "Nånting vart fel vid hämtning av kommentar";
			return false; 
		}
		
		if($this->DoComment($name, $fileName, $text) === false){
			echo "Det borde vara rätt då vi har skapa en kommentar på rätt sätt";
			return false;
		}
		
		$LastComment = end($Comments);
		$this->DeleteComment($LastComment->getID());

		if($LastComment->getText() !== $text && $LastComment->getName() !== $name)
		{
			echo "Nånting vart fel då denna kommentar bör va borta";
			return false; 
		}
		
		$this->DeleteCommentByFileName($fileName);
		
		if($this->CountComments($fileName) !== 0)
		{
			echo "Det borde inte finnas några kommentarer med filnamnet bäver";
			return false;
		}
		
		return true;
		
		
	
	}
}
